{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第1步：导入库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'tensorflow'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[2], line 5\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpyplot\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mplt\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpreprocessing\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m MinMaxScaler\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodels\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Sequential\n\u001b[0;32m      6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlayers\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Dense, LSTM, Dropout, GRU\n\u001b[0;32m      7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01moptimizers\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SGD\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\__init__.py:4\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mos\u001b[39;00m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;66;03m# DO NOT EDIT. Generated by api_gen.sh\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DTypePolicy\n\u001b[0;32m      5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m FloatDTypePolicy\n\u001b[0;32m      6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Function\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\api\\__init__.py:7\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;124;03m\"\"\"DO NOT EDIT.\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \n\u001b[0;32m      3\u001b[0m \u001b[38;5;124;03mThis file was autogenerated. Do not edit it by hand,\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;124;03msince your modifications would be overwritten.\u001b[39;00m\n\u001b[0;32m      5\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _tf_keras\n\u001b[0;32m      8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m activations\n\u001b[0;32m      9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m applications\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\api\\_tf_keras\\__init__.py:1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01m_tf_keras\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m keras\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\api\\_tf_keras\\keras\\__init__.py:7\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;124;03m\"\"\"DO NOT EDIT.\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \n\u001b[0;32m      3\u001b[0m \u001b[38;5;124;03mThis file was autogenerated. Do not edit it by hand,\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;124;03msince your modifications would be overwritten.\u001b[39;00m\n\u001b[0;32m      5\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m activations\n\u001b[0;32m      8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m applications\n\u001b[0;32m      9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m callbacks\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\api\\activations\\__init__.py:7\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;124;03m\"\"\"DO NOT EDIT.\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \n\u001b[0;32m      3\u001b[0m \u001b[38;5;124;03mThis file was autogenerated. Do not edit it by hand,\u001b[39;00m\n\u001b[0;32m      4\u001b[0m \u001b[38;5;124;03msince your modifications would be overwritten.\u001b[39;00m\n\u001b[0;32m      5\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m----> 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m deserialize\n\u001b[0;32m      8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m get\n\u001b[0;32m      9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m serialize\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\__init__.py:1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m activations\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m applications\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m backend\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\activations\\__init__.py:3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtypes\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m elu\n\u001b[0;32m      4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m exponential\n\u001b[0;32m      5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mactivations\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m gelu\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\activations\\activations.py:1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m backend\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ops\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi_export\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m keras_export\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\backend\\__init__.py:9\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m backend() \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtorch\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m      4\u001b[0m     \u001b[38;5;66;03m# When using the torch backend,\u001b[39;00m\n\u001b[0;32m      5\u001b[0m     \u001b[38;5;66;03m# torch needs to be imported first, otherwise it will segfault\u001b[39;00m\n\u001b[0;32m      6\u001b[0m     \u001b[38;5;66;03m# upon import.\u001b[39;00m\n\u001b[0;32m      7\u001b[0m     \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mtorch\u001b[39;00m\n\u001b[1;32m----> 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdtypes\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m result_type\n\u001b[0;32m     10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mkeras_tensor\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m KerasTensor\n\u001b[0;32m     11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mkeras_tensor\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m any_symbolic_tensors\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\backend\\common\\__init__.py:2\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m backend_utils\n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdtypes\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m result_type\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mvariables\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m AutocastScope\n\u001b[0;32m      4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mvariables\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m KerasVariable\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\backend\\common\\dtypes.py:5\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi_export\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m keras_export\n\u001b[0;32m      4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m config\n\u001b[1;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mvariables\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m standardize_dtype\n\u001b[0;32m      7\u001b[0m BOOL_TYPES \u001b[38;5;241m=\u001b[39m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbool\u001b[39m\u001b[38;5;124m\"\u001b[39m,)\n\u001b[0;32m      8\u001b[0m INT_TYPES \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m      9\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muint8\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m     10\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muint16\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m     16\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mint64\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m     17\u001b[0m )\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\backend\\common\\variables.py:10\u001b[0m\n\u001b[0;32m      8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mstateless_scope\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m get_stateless_scope\n\u001b[0;32m      9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mbackend\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcommon\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mstateless_scope\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m in_stateless_scope\n\u001b[1;32m---> 10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodule_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m tensorflow \u001b[38;5;28;01mas\u001b[39;00m tf\n\u001b[0;32m     11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnaming\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m auto_name\n\u001b[0;32m     14\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mKerasVariable\u001b[39;00m:\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\__init__.py:1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01maudio_dataset_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m audio_dataset_from_directory\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdataset_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m split_dataset\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mfile_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m get_file\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\audio_dataset_utils.py:4\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi_export\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m keras_export\n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m dataset_utils\n\u001b[0;32m      5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodule_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m tensorflow \u001b[38;5;28;01mas\u001b[39;00m tf\n\u001b[0;32m      6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodule_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m tensorflow_io \u001b[38;5;28;01mas\u001b[39;00m tfio\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\utils\\dataset_utils.py:9\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmultiprocessing\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpool\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ThreadPool\n\u001b[0;32m      7\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[1;32m----> 9\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m tree\n\u001b[0;32m     10\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapi_export\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m keras_export\n\u001b[0;32m     11\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m io_utils\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\tree\\__init__.py:1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree_api\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m assert_same_structure\n\u001b[0;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree_api\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m flatten\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree_api\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m is_nested\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\tree\\tree_api.py:6\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodule_utils\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m optree\n\u001b[0;32m      5\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m optree\u001b[38;5;241m.\u001b[39mavailable:\n\u001b[1;32m----> 6\u001b[0m     \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m optree_impl \u001b[38;5;28;01mas\u001b[39;00m tree_impl\n\u001b[0;32m      7\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m dmtree\u001b[38;5;241m.\u001b[39mavailable:\n\u001b[0;32m      8\u001b[0m     \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mkeras\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01msrc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtree\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m dmtree_impl \u001b[38;5;28;01mas\u001b[39;00m tree_impl\n",
      "File \u001b[1;32mE:\\pytorch\\anaconda3\\Lib\\site-packages\\keras\\src\\tree\\optree_impl.py:17\u001b[0m\n\u001b[0;32m     15\u001b[0m \u001b[38;5;66;03m# Register backend-specific node classes\u001b[39;00m\n\u001b[0;32m     16\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m backend() \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtensorflow\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m---> 17\u001b[0m     \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtensorflow\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mtrackable\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata_structures\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ListWrapper\n\u001b[0;32m     19\u001b[0m     optree\u001b[38;5;241m.\u001b[39mregister_pytree_node(\n\u001b[0;32m     20\u001b[0m         ListWrapper,\n\u001b[0;32m     21\u001b[0m         \u001b[38;5;28;01mlambda\u001b[39;00m x: (x, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[0;32m     22\u001b[0m         \u001b[38;5;28;01mlambda\u001b[39;00m metadata, children: ListWrapper(\u001b[38;5;28mlist\u001b[39m(children)),\n\u001b[0;32m     23\u001b[0m         namespace\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mkeras\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m     24\u001b[0m     )\n\u001b[0;32m     27\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mis_nested\u001b[39m(structure):\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'tensorflow'"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense, LSTM, Dropout, GRU\n",
    "from keras.optimizers import SGD"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第2步：加载历史数据文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset = pd.read_csv(\"datasets_8388_11883_IBM_2006-01-01_to_2018-01-01.csv\", \n",
    "                       index_col='Date', parse_dates=['Date'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Volume</th>\n",
       "      <th>Name</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2006-01-03</th>\n",
       "      <td>82.45</td>\n",
       "      <td>82.55</td>\n",
       "      <td>80.81</td>\n",
       "      <td>82.06</td>\n",
       "      <td>11715200</td>\n",
       "      <td>IBM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2006-01-04</th>\n",
       "      <td>82.20</td>\n",
       "      <td>82.50</td>\n",
       "      <td>81.33</td>\n",
       "      <td>81.95</td>\n",
       "      <td>9840600</td>\n",
       "      <td>IBM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2006-01-05</th>\n",
       "      <td>81.40</td>\n",
       "      <td>82.90</td>\n",
       "      <td>81.00</td>\n",
       "      <td>82.50</td>\n",
       "      <td>7213500</td>\n",
       "      <td>IBM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2006-01-06</th>\n",
       "      <td>83.95</td>\n",
       "      <td>85.03</td>\n",
       "      <td>83.41</td>\n",
       "      <td>84.95</td>\n",
       "      <td>8197400</td>\n",
       "      <td>IBM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2006-01-09</th>\n",
       "      <td>84.10</td>\n",
       "      <td>84.25</td>\n",
       "      <td>83.38</td>\n",
       "      <td>83.73</td>\n",
       "      <td>6858200</td>\n",
       "      <td>IBM</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Open   High    Low  Close    Volume Name\n",
       "Date                                                 \n",
       "2006-01-03  82.45  82.55  80.81  82.06  11715200  IBM\n",
       "2006-01-04  82.20  82.50  81.33  81.95   9840600  IBM\n",
       "2006-01-05  81.40  82.90  81.00  82.50   7213500  IBM\n",
       "2006-01-06  83.95  85.03  83.41  84.95   8197400  IBM\n",
       "2006-01-09  84.10  84.25  83.38  83.73   6858200  IBM"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3020, 6)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 检查数据是否有缺失值\n",
    "train_set = dataset[:'2016'].iloc[:, 1:2].values # 训练集，获取到第一列的数据\n",
    "test_set = dataset['2017':].iloc[:,1:2].values # 测试集，获取到第一列的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2769, 1)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(251, 1)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第3步：定义显示函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_predictions(test_result, predict_restult):\n",
    "    \"\"\"\n",
    "    test_result: 真实值\n",
    "    predict_result: 预测值\n",
    "    \"\"\"\n",
    "    plt.plot(test_result, color='red', label='IBM True Stock Price')\n",
    "    plt.plot(predict_restult, color='blue', label=\"IMB prdicted Stock Price\")\n",
    "    plt.title(\"IBM Stock Price\")\n",
    "    plt.xlabel(\"Time\")\n",
    "    plt.ylabel(\"Stock Price\")\n",
    "    plt.legend() # 给图加上图例\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 第4步：绘制训练集和测试集的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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lFLceeedTJo0icOHD/PAAw9w+vRpvL29+fjjj0lLS+OXX35h5cqVTJ06lXnz5rFs2TJGjx7tcM/XX3+dhQsX4uXlxTfffEOHDh04ffo0EydOtAVv77zzDh07duS2227j9OnTREdHM2/ePBISEnjiiScoKiqiX79+zJo1C5PJREREBDfffDN//PEHTz75JM2aNeOFF14gPz+f9u3b8/nnn+Pr6+swjpEjR9oeDxw4kB9//BGABQsWMG7cOEwmE23btqVDhw5s3LiRQYMGMXToUBISEsp8/2fNmsWUKVMwmUwAhISE2I5dddVVzJ071zZ7WhsyUyqEEEKIGtkQl0rbp3+n/TO/YzZrSlqW16/03EIAHhvRif8b05XerZs4HB//8fpyr33yxx2MfHsVmXmF9TpGIUTdSUpKYu3atbz11lt06dKF1atXs23bNl566SWeeeYZp9fs27ePxYsXs3HjRv79739TWOj4/3xsbCzJycns2rWLnTt38s9//hOAe++9l5kzZ7JlyxbeeOMN7r//fgYPHszVV1/N9OnTiY2NpX379vz111/06dPH4Z4BAQHs3LmTBx98kEcffRSARx55hEmTJrFp0ybmzZvH3XffTUhICJ988glDhgwhNjaWsLAwJkyYwHfffcfOnTspKipi1qxZtvsGBgaydetWLrvsMqZOncrSpUvZunUrffv25a233qIin332GZdffjkAycnJtGrVynYsPDyc5OSKs0sOHDjA6tWrGTBgAMOGDWPTpk22Y3379mX16tUVXl9VMlMqhBBCNEKfrI6jR1gAA9oFNtgYVhwoKfnf7hmjKH/CtDH1+pzFZs2Ez43258F+JkZ3b8HdQ9oRMeU32zlxp8sveLT2cCoA2xLTGdYpuF7HKkRjVt0Zzfp044034urqCkBGRgZ33HEHBw8eRClVJti0GjNmDCaTCZPJREhICCdPniQ8PNx2vF27dsTFxfHQQw8xZswYRo4cSXZ2NmvXruXGG2+0nZefn+/0/sePHyc42PF3yPjx421fJ02aBMDSpUsd0n4zMzPJzs52uG7//v20bduWTp06AXDHHXfw/vvv2wJba3rv+vXr2bNnDzExMQAUFBQwaNCgcr9vr7zyCm5ubtx6663lnlOZoqIi0tLSWL9+PZs2beKmm24iLi4OpRQhISEcO3asxve2J0GpEEII0cgUFZuZ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\n",
      "text/plain": [
       "<Figure size 1152x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dataset['High'][:\"2016\"].plot(figsize=(16, 4), legend=True)\n",
    "dataset['High'][\"2017\":].plot(figsize=(16, 4), legend=True)\n",
    "plt.title(\"IBM Stock Price\")\n",
    "plt.legend(['Train set(before 2016)', 'Test set(after 2017)'])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 正则化：将每一维的特征映射到指定的区间：【0，1】\n",
    "sc = MinMaxScaler(feature_range=[0, 1])\n",
    "train_set_scaled = sc.fit_transform(train_set)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建序列数据集（训练和测试）\n",
    "# 60个时间步为一个样本，1个输出\n",
    "X_train = []\n",
    "y_train = []\n",
    "for i in range(60, 2769):\n",
    "    X_train.append(train_set_scaled[i-60:i, 0]) \n",
    "    y_train.append(train_set_scaled[i, 0])\n",
    "\n",
    "X_train, y_train = np.array(X_train), np.array(y_train) # numpy类型变换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2709, 60)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.06065089, 0.06029868, 0.06311637, 0.0781206 , 0.07262609,\n",
       "       0.07171034, 0.07657087, 0.07058326, 0.0669907 , 0.06494787,\n",
       "       0.075796  , 0.07361229, 0.06417301, 0.05621302, 0.05783319,\n",
       "       0.05409975, 0.05431107, 0.05515638, 0.05543815, 0.05677656,\n",
       "       0.05846717, 0.05388842, 0.04811214, 0.04233587, 0.04402649,\n",
       "       0.0490279 , 0.04832347, 0.05297267, 0.05614258, 0.05290223,\n",
       "       0.05325444, 0.04909834, 0.04994365, 0.04797126, 0.05431107,\n",
       "       0.05212736, 0.04726684, 0.04895745, 0.04656241, 0.04839391,\n",
       "       0.04416737, 0.0485348 , 0.04719639, 0.04825303, 0.05395886,\n",
       "       0.05663567, 0.05853762, 0.05959425, 0.06375035, 0.06917442,\n",
       "       0.06889265, 0.06670893, 0.06910397, 0.07783883, 0.07565511,\n",
       "       0.07276698, 0.06889265, 0.0656523 , 0.06656805, 0.06769513])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# LSTM的输入：(samples, sequence_length, features) \n",
    "# reshape: 训练集(2709,60)  ---> (2709, 60, 1)\n",
    "X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1)) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2709, 60, 1)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 搭建LSTM模型，进行训练和预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = Sequential()\n",
    "# LSTM 第一层\n",
    "model.add(LSTM(128, return_sequences=True, input_shape=(X_train.shape[1], 1)))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "# LSTM 第二层\n",
    "model.add(LSTM(128, return_sequences=True))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "# LSTM 第三层\n",
    "model.add(LSTM(128))\n",
    "model.add(Dropout(0.2))\n",
    "\n",
    "# Dense层\n",
    "model.add(Dense(units=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "85/85 [==============================] - 30s 357ms/step - loss: 0.0666\n",
      "Epoch 2/20\n",
      "85/85 [==============================] - 32s 372ms/step - loss: 0.0124\n",
      "Epoch 3/20\n",
      "85/85 [==============================] - 31s 370ms/step - loss: 0.0080\n",
      "Epoch 4/20\n",
      "85/85 [==============================] - 34s 399ms/step - loss: 0.0063\n",
      "Epoch 5/20\n",
      "85/85 [==============================] - 45s 527ms/step - loss: 0.0055\n",
      "Epoch 6/20\n",
      "85/85 [==============================] - 45s 532ms/step - loss: 0.0048\n",
      "Epoch 7/20\n",
      "85/85 [==============================] - 46s 543ms/step - loss: 0.0039\n",
      "Epoch 8/20\n",
      "85/85 [==============================] - 45s 530ms/step - loss: 0.0039\n",
      "Epoch 9/20\n",
      "85/85 [==============================] - 47s 551ms/step - loss: 0.0034\n",
      "Epoch 10/20\n",
      "85/85 [==============================] - 49s 582ms/step - loss: 0.0032\n",
      "Epoch 11/20\n",
      "85/85 [==============================] - 49s 571ms/step - loss: 0.0029\n",
      "Epoch 12/20\n",
      "85/85 [==============================] - 48s 563ms/step - loss: 0.0026\n",
      "Epoch 13/20\n",
      "85/85 [==============================] - 57s 674ms/step - loss: 0.0026\n",
      "Epoch 14/20\n",
      "85/85 [==============================] - 53s 623ms/step - loss: 0.0025\n",
      "Epoch 15/20\n",
      "85/85 [==============================] - 51s 605ms/step - loss: 0.0023\n",
      "Epoch 16/20\n",
      "85/85 [==============================] - 39s 455ms/step - loss: 0.0021\n",
      "Epoch 17/20\n",
      "85/85 [==============================] - 36s 429ms/step - loss: 0.0021\n",
      "Epoch 18/20\n",
      "85/85 [==============================] - 41s 478ms/step - loss: 0.0020\n",
      "Epoch 19/20\n",
      "85/85 [==============================] - 39s 460ms/step - loss: 0.0019\n",
      "Epoch 20/20\n",
      "85/85 [==============================] - 30s 351ms/step - loss: 0.0018\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x13f4a7ac8>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 模型编译\n",
    "model.compile(optimizer='rmsprop', loss='mse')\n",
    "\n",
    "# 模型训练\n",
    "model.fit(X_train, y_train, epochs=20, batch_size=32)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 构建数据集，进行预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset_total = pd.concat((dataset['High'][:\"2016\"], dataset['High'][\"2017\":]), axis=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3020,)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_total.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Date\n",
       "2006-01-03     82.55\n",
       "2006-01-04     82.50\n",
       "2006-01-05     82.90\n",
       "2006-01-06     85.03\n",
       "2006-01-09     84.25\n",
       "               ...  \n",
       "2017-12-22    153.00\n",
       "2017-12-26    153.86\n",
       "2017-12-27    153.18\n",
       "2017-12-28    154.12\n",
       "2017-12-29    154.72\n",
       "Name: High, Length: 3020, dtype: float64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataset_total"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "inputs = dataset_total[len(train_set):].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "inputs = inputs.reshape(-1, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(251, 1)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "inputs_scaled = sc.fit_transform(inputs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 构建测试集X_test, 进行估价预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset_total = pd.concat((dataset['High'][:\"2016\"], dataset['High'][\"2017\":]), axis=0)\n",
    "# 获取输入数据\n",
    "inputs = dataset_total[len(dataset_total) - len(test_set) - 60:].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([157.43, 157.7 , 158.49, 156.95, 154.97, 154.22, 155.53, 155.89,\n",
       "       151.  , 152.45, 152.9 , 151.15, 151.52, 151.16, 152.94, 154.06,\n",
       "       154.44, 154.33, 153.91, 153.34, 153.74, 153.64, 156.11, 155.93,\n",
       "       155.56, 161.16, 161.34, 161.86, 159.15, 159.55, 159.93, 160.72,\n",
       "       163.  , 163.  , 162.38, 163.19, 164.66, 164.41, 163.8 , 162.2 ,\n",
       "       160.29, 161.15, 160.79, 165.18, 166.  , 166.72, 166.79, 169.95,\n",
       "       169.89, 169.85, 169.11, 167.26, 168.25, 167.94, 168.23, 167.49,\n",
       "       167.98, 167.74, 166.99, 166.7 , 167.87, 169.87, 169.39, 169.92,\n",
       "       169.8 , 168.09, 167.76, 168.01, 168.48, 168.18, 168.59, 167.45,\n",
       "       170.64, 171.25, 176.  , 179.25, 178.88, 179.2 , 177.07, 175.58,\n",
       "       175.7 , 174.97, 176.34, 175.98, 178.62, 177.5 , 177.8 , 178.87,\n",
       "       179.9 , 180.13, 181.92, 182.79, 181.57, 180.79, 181.34, 182.5 ,\n",
       "       181.49, 181.25, 180.63, 182.55, 181.88, 181.32, 180.99, 181.29,\n",
       "       180.95, 179.25, 179.49, 178.06, 176.82, 176.28, 179.  , 176.79,\n",
       "       176.18, 176.23, 175.06, 175.67, 175.5 , 174.16, 175.  , 174.49,\n",
       "       174.59, 174.95, 174.87, 174.96, 176.33, 173.47, 172.93, 172.56,\n",
       "       171.23, 171.2 , 171.36, 171.3 , 171.69, 162.64, 162.4 , 162.11,\n",
       "       161.57, 162.04, 161.1 , 160.48, 160.59, 160.42, 159.49, 159.45,\n",
       "       159.14, 155.78, 153.47, 153.1 , 152.37, 151.15, 151.26, 151.83,\n",
       "       153.99, 154.14, 151.33, 152.46, 152.84, 153.68, 152.76, 153.73,\n",
       "       153.  , 152.67, 152.8 , 152.87, 153.2 , 152.93, 152.89, 154.2 ,\n",
       "       152.82, 154.26, 157.2 , 155.48, 154.94, 154.69, 155.42, 155.86,\n",
       "       155.39, 155.79, 154.99, 154.68, 155.75, 155.34, 155.55, 155.74,\n",
       "       154.5 , 156.02, 155.89, 153.83, 153.49, 153.89, 153.65, 154.24,\n",
       "       154.19, 154.62, 153.88, 154.29, 150.25, 148.83, 147.87, 147.04,\n",
       "       147.49, 146.46, 145.4 , 145.04, 144.93, 145.67, 145.29, 145.34,\n",
       "       145.39, 145.09, 142.76, 142.03, 142.42, 142.59, 142.76, 143.34,\n",
       "       142.91, 142.89, 141.15, 140.42, 141.15, 143.05, 143.68, 144.19,\n",
       "       144.56, 143.42, 143.28, 143.66, 144.5 , 144.36, 144.47, 144.64,\n",
       "       143.15, 145.13, 146.37, 146.29, 146.38, 145.17, 145.48, 144.98,\n",
       "       145.88, 145.89, 145.59, 146.03, 147.42, 146.9 , 145.86, 145.69,\n",
       "       146.86, 147.2 , 147.02, 147.54, 146.85, 147.79, 148.95, 148.47,\n",
       "       147.89, 147.85, 147.67, 147.12, 161.23, 160.96, 162.48, 162.51,\n",
       "       159.7 , 156.37, 155.12, 154.63, 154.59, 154.93, 154.9 , 154.49,\n",
       "       153.47, 151.82, 151.51, 151.79, 151.8 , 150.89, 149.  , 148.97,\n",
       "       148.7 , 149.65, 150.15, 151.95, 152.45, 152.39, 152.2 , 152.49,\n",
       "       152.93, 153.61, 154.41, 155.02, 156.8 , 156.74, 156.22, 154.45,\n",
       "       155.03, 155.89, 157.85, 156.73, 155.11, 153.8 , 154.18, 154.17,\n",
       "       153.89, 153.46, 153.  , 153.86, 153.18, 154.12, 154.72])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 归一化\n",
    "inputs = inputs.reshape(-1, 1)\n",
    "inputs = sc.transform(inputs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(311, 1)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inputs.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(251, 60)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 准备测试集X_test,进行股价预测\n",
    "X_test = []\n",
    "for i in range(60, 311):\n",
    "    X_test.append(inputs[i-60:i, 0])\n",
    "    \n",
    "X_test = np.array(X_test) # numpy 类型转换\n",
    "\n",
    "X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(251, 60, 1)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "predict_test = model.predict(X_test) # 预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(251, 1)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "predict_stock_price = sc.inverse_transform(predict_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[168.57092],\n",
       "       [168.69382],\n",
       "       [169.65242],\n",
       "       [170.35161],\n",
       "       [170.84596],\n",
       "       [171.02237],\n",
       "       [170.4601 ],\n",
       "       [169.75737],\n",
       "       [169.38156],\n",
       "       [169.46404],\n",
       "       [169.58615],\n",
       "       [169.80162],\n",
       "       [169.56326],\n",
       "       [170.3292 ],\n",
       "       [171.34633],\n",
       "       [173.63313],\n",
       "       [176.39796],\n",
       "       [178.01892],\n",
       "       [178.7997 ],\n",
       "       [178.39485],\n",
       "       [177.41373],\n",
       "       [176.70485],\n",
       "       [176.20074],\n",
       "       [176.44489],\n",
       "       [176.7224 ],\n",
       "       [177.7209 ],\n",
       "       [178.14804],\n",
       "       [178.35118],\n",
       "       [178.69153],\n",
       "       [179.2505 ],\n",
       "       [179.73222],\n",
       "       [180.54192],\n",
       "       [181.35703],\n",
       "       [181.52586],\n",
       "       [181.26234],\n",
       "       [181.13414],\n",
       "       [181.43825],\n",
       "       [181.48216],\n",
       "       [181.40776],\n",
       "       [181.14082],\n",
       "       [181.47731],\n",
       "       [181.63916],\n",
       "       [181.57304],\n",
       "       [181.35866],\n",
       "       [181.26881],\n",
       "       [181.15274],\n",
       "       [180.60979],\n",
       "       [180.229  ],\n",
       "       [179.61096],\n",
       "       [178.8226 ],\n",
       "       [178.10707],\n",
       "       [178.48729],\n",
       "       [178.36404],\n",
       "       [177.97884],\n",
       "       [177.61253],\n",
       "       [177.02715],\n",
       "       [176.78099],\n",
       "       [176.66364],\n",
       "       [176.22221],\n",
       "       [176.09131],\n",
       "       [175.92331],\n",
       "       [175.84154],\n",
       "       [175.90877],\n",
       "       [175.96098],\n",
       "       [176.00768],\n",
       "       [176.449  ],\n",
       "       [175.94508],\n",
       "       [175.18893],\n",
       "       [174.49008],\n",
       "       [173.67642],\n",
       "       [173.12927],\n",
       "       [172.92116],\n",
       "       [172.87396],\n",
       "       [172.99628],\n",
       "       [170.17953],\n",
       "       [167.15663],\n",
       "       [165.01405],\n",
       "       [163.91484],\n",
       "       [163.76776],\n",
       "       [163.6057 ],\n",
       "       [163.13507],\n",
       "       [162.65553],\n",
       "       [162.2341 ],\n",
       "       [161.6113 ],\n",
       "       [161.08484],\n",
       "       [160.67245],\n",
       "       [159.21484],\n",
       "       [156.9592 ],\n",
       "       [155.07433],\n",
       "       [153.87259],\n",
       "       [152.9649 ],\n",
       "       [152.50293],\n",
       "       [152.58931],\n",
       "       [153.6519 ],\n",
       "       [154.7009 ],\n",
       "       [154.11124],\n",
       "       [153.36444],\n",
       "       [153.09293],\n",
       "       [153.50952],\n",
       "       [153.70473],\n",
       "       [154.04372],\n",
       "       [154.0589 ],\n",
       "       [153.77733],\n",
       "       [153.54225],\n",
       "       [153.47919],\n",
       "       [153.65302],\n",
       "       [153.75447],\n",
       "       [153.74376],\n",
       "       [154.19275],\n",
       "       [154.15392],\n",
       "       [154.41202],\n",
       "       [155.88713],\n",
       "       [156.63542],\n",
       "       [156.4632 ],\n",
       "       [155.88905],\n",
       "       [155.70816],\n",
       "       [156.0073 ],\n",
       "       [156.22282],\n",
       "       [156.44449],\n",
       "       [156.28789],\n",
       "       [155.90201],\n",
       "       [155.9977 ],\n",
       "       [156.14502],\n",
       "       [156.30386],\n",
       "       [156.47064],\n",
       "       [156.09981],\n",
       "       [156.20134],\n",
       "       [156.4732 ],\n",
       "       [155.90172],\n",
       "       [155.01607],\n",
       "       [154.54164],\n",
       "       [154.39381],\n",
       "       [154.65688],\n",
       "       [154.95782],\n",
       "       [155.27632],\n",
       "       [155.17393],\n",
       "       [155.05617],\n",
       "       [153.46149],\n",
       "       [151.21408],\n",
       "       [149.25975],\n",
       "       [147.98996],\n",
       "       [147.75139],\n",
       "       [147.66977],\n",
       "       [147.14934],\n",
       "       [146.41463],\n",
       "       [145.82574],\n",
       "       [145.83356],\n",
       "       [145.96149],\n",
       "       [146.02934],\n",
       "       [146.03226],\n",
       "       [145.87637],\n",
       "       [144.78073],\n",
       "       [143.34831],\n",
       "       [142.59723],\n",
       "       [142.67131],\n",
       "       [143.16772],\n",
       "       [143.82442],\n",
       "       [144.065  ],\n",
       "       [143.9292 ],\n",
       "       [142.9809 ],\n",
       "       [141.70554],\n",
       "       [141.16733],\n",
       "       [142.09755],\n",
       "       [143.61351],\n",
       "       [144.81558],\n",
       "       [145.4167 ],\n",
       "       [145.00787],\n",
       "       [144.20346],\n",
       "       [143.77094],\n",
       "       [144.11526],\n",
       "       [144.65796],\n",
       "       [145.05156],\n",
       "       [145.26265],\n",
       "       [144.71684],\n",
       "       [144.78493],\n",
       "       [145.74666],\n",
       "       [146.66196],\n",
       "       [147.10164],\n",
       "       [146.63922],\n",
       "       [146.05402],\n",
       "       [145.54695],\n",
       "       [145.67122],\n",
       "       [146.09807],\n",
       "       [146.3287 ],\n",
       "       [146.5093 ],\n",
       "       [147.1619 ],\n",
       "       [147.57924],\n",
       "       [147.22803],\n",
       "       [146.57109],\n",
       "       [146.56857],\n",
       "       [147.0931 ],\n",
       "       [147.5381 ],\n",
       "       [147.9157 ],\n",
       "       [147.84267],\n",
       "       [147.9378 ],\n",
       "       [148.5884 ],\n",
       "       [149.04544],\n",
       "       [148.93123],\n",
       "       [148.5793 ],\n",
       "       [148.23958],\n",
       "       [147.8603 ],\n",
       "       [153.34546],\n",
       "       [159.03114],\n",
       "       [162.38724],\n",
       "       [163.48921],\n",
       "       [162.34595],\n",
       "       [159.60977],\n",
       "       [156.8861 ],\n",
       "       [155.24345],\n",
       "       [154.87755],\n",
       "       [155.3737 ],\n",
       "       [155.96106],\n",
       "       [156.0956 ],\n",
       "       [155.51804],\n",
       "       [154.18182],\n",
       "       [152.88889],\n",
       "       [152.27704],\n",
       "       [152.24559],\n",
       "       [152.09206],\n",
       "       [151.14476],\n",
       "       [150.15446],\n",
       "       [149.49214],\n",
       "       [149.63142],\n",
       "       [150.27744],\n",
       "       [151.52524],\n",
       "       [152.68233],\n",
       "       [153.22227],\n",
       "       [153.1657 ],\n",
       "       [152.99945],\n",
       "       [153.0769 ],\n",
       "       [153.53824],\n",
       "       [154.31316],\n",
       "       [155.1472 ],\n",
       "       [156.34767],\n",
       "       [157.20833],\n",
       "       [157.35553],\n",
       "       [156.48387],\n",
       "       [155.76195],\n",
       "       [155.82649],\n",
       "       [157.01219],\n",
       "       [157.75613],\n",
       "       [157.32233],\n",
       "       [156.04929],\n",
       "       [155.09212],\n",
       "       [154.73506],\n",
       "       [154.68802],\n",
       "       [154.5936 ],\n",
       "       [154.30226],\n",
       "       [154.3495 ],\n",
       "       [154.2771 ],\n",
       "       [154.49394]], dtype=float32)"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predict_stock_price"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制测试结果和预测结果\n",
    "\n",
    "plot_predictions(test_set, predict_stock_price)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基于GRU实现股价预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_gru = Sequential()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_gru.add(GRU(50, return_sequences=True, input_shape=(X_train.shape[1], 1), activation='tanh'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_gru.add(Dropout(0.2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_gru.add(GRU(50, activation='tanh'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_gru.add(Dropout(0.2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_gru.add(Dense(1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 模型编译\n",
    "model_gru.compile(optimizer=SGD(lr=0.01, decay=1e-7, momentum=0.9), loss='mse')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "85/85 [==============================] - 18s 209ms/step - loss: 0.0351\n",
      "Epoch 2/20\n",
      "85/85 [==============================] - 18s 217ms/step - loss: 0.0032\n",
      "Epoch 3/20\n",
      "85/85 [==============================] - 19s 224ms/step - loss: 0.0026\n",
      "Epoch 4/20\n",
      "85/85 [==============================] - 19s 225ms/step - loss: 0.0023\n",
      "Epoch 5/20\n",
      "85/85 [==============================] - 19s 221ms/step - loss: 0.0021\n",
      "Epoch 6/20\n",
      "85/85 [==============================] - 19s 225ms/step - loss: 0.0019\n",
      "Epoch 7/20\n",
      "85/85 [==============================] - 19s 226ms/step - loss: 0.0018\n",
      "Epoch 8/20\n",
      "85/85 [==============================] - 19s 223ms/step - loss: 0.0017\n",
      "Epoch 9/20\n",
      "85/85 [==============================] - 19s 229ms/step - loss: 0.0016\n",
      "Epoch 10/20\n",
      "85/85 [==============================] - 19s 227ms/step - loss: 0.0015\n",
      "Epoch 11/20\n",
      "85/85 [==============================] - 19s 226ms/step - loss: 0.0016\n",
      "Epoch 12/20\n",
      "85/85 [==============================] - 15s 177ms/step - loss: 0.0014\n",
      "Epoch 13/20\n",
      "85/85 [==============================] - 12s 139ms/step - loss: 0.0015\n",
      "Epoch 14/20\n",
      "85/85 [==============================] - 11s 134ms/step - loss: 0.0014\n",
      "Epoch 15/20\n",
      "85/85 [==============================] - 12s 138ms/step - loss: 0.0013\n",
      "Epoch 16/20\n",
      "85/85 [==============================] - 12s 138ms/step - loss: 0.0013\n",
      "Epoch 17/20\n",
      "85/85 [==============================] - 12s 137ms/step - loss: 0.0013\n",
      "Epoch 18/20\n",
      "85/85 [==============================] - 13s 150ms/step - loss: 0.0013\n",
      "Epoch 19/20\n",
      "85/85 [==============================] - 11s 135ms/step - loss: 0.0013\n",
      "Epoch 20/20\n",
      "85/85 [==============================] - 12s 139ms/step - loss: 0.0012\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.keras.callbacks.History at 0x140e4feb8>"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练\n",
    "model_gru.fit(X_train, y_train, epochs=20, batch_size=32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 准备测试集X_test,进行股价预测\n",
    "X_test = []\n",
    "for i in range(60, 311):\n",
    "    X_test.append(inputs[i-60:i, 0])\n",
    "    \n",
    "X_test = np.array(X_test) # numpy 类型转换\n",
    "\n",
    "X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "GRU_predicted = model_gru.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "GRU_predicted_stock_price = sc.inverse_transform(GRU_predicted)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOydd3gUVffHPzchBBCkBYj00JGQhBYQkC5NAelNiqAIVkB5FVHwh6KCiIIvvIp0RZoFUBEBadJrgNA7hCAQihAgpJ3fH3d3swlJSNtsNtzP8+wzM3dmZ84sYb5zzrn3XCUiGAwGg8EA4OZsAwwGg8GQdTCiYDAYDAYbRhQMBoPBYMOIgsFgMBhsGFEwGAwGgw0jCgaDwWCwYUTBYHACSilRSlVwwHmfVEodzejzGh4ejCgYXAKl1BmlVAvLen+lVIxSKtzyOaWUGmJ3bFnLQ3dvgnN4KaUilVJnkrlOB6VUkFLqplIqTCm1VinlY9n3gVLqewfdYlL2WO/Feq9nlFLvJHW8iPwtIpUz00ZD9iKHsw0wGNLIVhFpCKCUqgFsVEptExF7IcijlPIVkWDLdi/gNOCZ2Aktb+7zgE7AWiAv0BKIcdA9pIYCIhKtlHoC+EspFSQiK+0PUErlEJFoJ9lnyCYYT8Hg8liE4DBQNcGu74B+dtt90Q/9pAgATovIX6K5JSI/icg5pVRr4F2gu+WNfR+AUqq4Umq5UuqaUuqEUupF68mUUu5KqXeVUieVUreUUruVUqUSXlQp1VApdV4p1SQF97oVOAj4KqWaKKVClFJvK6X+AWZb2+zOXUop9bNS6opS6qpS6r92+wYopQ4rpa4rpf5USpV50PUN2R8jCgaXRylVB6gE7Eqw63ugh+Xh/Dj6zX97MqfaA1RRSn2hlGqqlMpr3WF5K/8YWCQieUXE37JrIRACFAe6AB8rpZpZ9g0HegJtgUeBAcCdBLa3BhYAnUVk/QPuUymlGgDVAKtH5A0UAsoAgxIc7w78BpwFygIlLPailOqAFrlOQBHgb4sdhoccIwoGV6WeUuqGUuoWsAPtFRxPcEwIcBRogfYSvkvuhCJyCmiCfnguBsKUUnPsxcEey1t/A+BtEYkQkSBghuVaAC8A74nIUYvnsU9ErtqdoivwDdBGRHY84H7DgGuW878jIn9Z2mOBMSJyT0TuJvhOIFqsRojIbYuNmyz7BgOfiMhhS8jpYyDAeAsGIwoGV2WbiBQQkXzot+Vq6AdbQuYB/dFv7MmKAoCIbBORbiJSBHgSaASMSuLw4sA1Ebll13YWLSoApYCTyVxuKLDYLueRHF4iUlBEqorIFLv2KyISkcR3SgFnk8gzlAEmW4T1BlpwlJ3thocUIwoGl0dELgE/Ae0S2f0T8DRwSkTOpfK8O4GfAV9rU4JDQoFCSql8dm2lgQuW9fNA+WQu0RV4Vin1RmrsSmhmMvvOA6WVUol1KDkPvGQRVusnt4hsSYcthmyAEQWDy6OUKgx0RCdg4yEit4Fm6FDOg87TUCn1olKqqGW7CtAe2GY55BJQVinlZjn3eWAL8IlSKpdSyg8YiM5lgA71fKiUqmjJB/hZbLUSCjQH3rDvUpuB7AAuAp8qpR6x2NjAsu9rYKRSqprlXvMrpbo6wAaDi2FEweCqPGHtu4/ueXQFeC2xA0Vkl4gkF8axcgMtAgcs510J/AJMsOxfYlleVUrtsaz3RCdxQy3HjhGRNZZ9k9C5iVXATWAmkDuBbefQwvCOUuqBwpUaRCQG7T1VAM6hcyzdLft+AcYDC5VSN4FgoE1GXt/gmigzyY7BYDAYrBhPwWAwGAw2jCgYDAaDwYYRBYPBYDDYMKJgMBgMBhsuXRDPy8tLypYt62wzDAaDwaXYvXt3mGWA5n24tCiULVuWXbsSlrsxGAwGQ3Iopc4mtc+EjwwGg8Fgw4iCwWAwGGwYUTAYDAaDDZfOKRgMrkZUVBQhISFERCRV2NRgyDhy5cpFyZIl8fDwSPF3jCgYDJlISEgI+fLlo2zZsiilnG2OIRsjIly9epWQkBB8fHxS/D0TPjIYMpGIiAgKFy5sBMHgcJRSFC5cONVeqREFgyGTMYJgyCzS8rdmRCErcfQorFjhbCsMBsNDjBGFrMSbb0LnzhAVFdd27x7cTTD17oEDcP585tpmyDbkzaunnD5z5gy5c+cmICAAf39/6tevz9GjRwFYv349SilmzJhh+15QUBBKKSZOnBjvfOPGjSMgIICAgADc3d1t61OmTCGjuHPnDr1796Z69er4+vrSsGFDwsPDuXHjBtOmTUvzeZs0afLAAbBNmjShcuXK+Pv706BBA9tvlJAXXniBQ4cOpdmWrIIRhazCnTvw118QEaEf+laeew7at49/bMeOut1gSCfly5cnKCiIffv20a9fPz7+OG6aa19fXxYvXmzbXrBgAf7+/vedY9SoUQQFBREUFETu3Llt66+//jqgE56xsbHpsnPy5MkUK1aMAwcOEBwczMyZM/Hw8Ei3KKSU+fPn236jESNG3Lc/JiaGGTNm8PjjjzvcFkdjRCGrsGaNFgSA7dv1MjYWVq2Cdevg5k3ddu8enDoFGzfCsWPOsdWQLbl58yYFCxa0bZcpU4aIiAguXbqEiLBy5UratEnZ5GxnzpyhcuXK9O3bF19fX86fP2/zUAB+/PFH+vfvD8CVK1fo3LkzderUoU6dOmzevPm+8128eJESJUrYtitXroynpyfvvPMOJ0+eJCAggBEjRiAijBgxAl9fX6pXr86iRYts3xk/fjzVq1fH39+fd955J975Y2Nj6d+/P++9916y99WoUSNOnDgBaI/rzTffxN/fn61bt8bzOlauXEnNmjXx9/enefPmANy+fZsBAwYQGBhIjRo1WLZsWYp+y8zGdEnNKvz6K+TLB56esGMHDBkChw7FicHff8PTT8OZM2CdLW/mTBg/3mkmG9LJ0KEQFJSx5wwIgC+/TPHh1gfqrVu3uHPnDtutLyQWunTpwpIlS6hRowY1a9bE09Mzxec+fvw4c+fOpV69eske98YbbzBs2DAaNmzIuXPnaNWqFYcPH453zIABA2jZsiU//vgjzZs3p1+/flSsWJFPP/2U4OBggiy/408//WTzfMLCwqhTpw6NGjUiKCiIZcuWsX37dvLkycO1a9ds546OjqZ37974+voyatSoZG399ddfqV69OqAf8nXr1uXzzz+Pd8yVK1d48cUX2bhxIz4+PrZrjRs3jmbNmjFr1ixu3LhBYGAgLVq04JFHHknZD5pJGFHIKvz9NzRrBjExcZ7C1q16qRSsXatF4aRlquFSpWD2bPjgA8idO9FTGgwPwho+Ali0aBGDBg1i5cqVtv3dunWje/fuHDlyhJ49e7Jly5YUn7tMmTIPFASANWvWxIvF37x5k/Dw8HieRUBAAKdOnWLVqlWsWbOGOnXqsHXrVnIn+NvftGkTPXv2xN3dnWLFitG4cWN27tzJhg0beP7558mTJw8AhQoVsn3npZdeolu3bskKQu/evcmdOzdly5blq6++AsDd3Z3OnTvfd+y2bdto1KiRbWyA9VqrVq1i+fLltpxMREQE586do2rVqg/8jTITIwpZgeho/bDv1Any5IHff4cbN2DLFvDygurVdXhJRIeOACZOhO7dtTC8/LJz7TekjVS80WcG7du35/nnn4/X5u3tjYeHB6tXr2by5MmpEoWEb8D23SPt+87Hxsaybds2cuXKlez58ubNS6dOnejUqRNubm6sWLEi0Ydyaqlfvz7r1q3jzTffTNKG+fPnU7t27XhtuXLlwt3dPcXXERF++uknKleunC57HY3JKWQFzpzRwlCxovYWROC332DTJqhfHzp0gP37YfhwOHECHnkEunaFevW0OEREwIIFcYJhMKSBTZs2Ub58+fvax44dy/jx41P1AEyMYsWKcfjwYWJjY/nll19s7S1btrS9fQM2z8WezZs3c/36dQAiIyM5dOgQZcqUIV++fNy6dct23JNPPsmiRYuIiYnhypUrbNy4kcDAQJ566ilmz57NnTt3AOKFjwYOHEjbtm3p1q0b0dHR6bpHgHr16rFx40ZOnz4d71qtWrXiq6++Qizh371796b7Wo7AeApZgePH9bJSJf2gL1EC3n9fi8WIEcjAF9i6OZa/v/yHEnlu0KGsL1HXFV+W+54/t4XhXXQrA24tpH350ajduyB/fqfejsF1sOYURIScOXPG64JqpX79+hlyrU8//ZRnnnmGIkWKULt2bcLDwwGYMmUKr7zyCn5+fkRHR9OoUSO+/vrr++wcMmSIrSfT008/TefOnVFK0aBBA3x9fWnTpg0TJkxg69at+Pv7o5RiwoQJeHt707p1a4KCgqhduzY5c+akbdu28XpaDR8+nH///Zc+ffowf/583NzS/r5cpEgRpk+fTqdOnYiNjaVo0aKsXr2a999/n6FDh+Ln50dsbCw+Pj789ttvab6OwxARl/3UqlVLsgWTJ4uAyKVLenvoUL3t7S0xt+9Knz560/op/0ioFC2q1xuUPC2lOSMgUpoz8rb/CgkJce7tGJLm0KFDzjbB8JCR2N8csEuSeK6a8FFW4NgxePRRKGKZHa9HD+6Qm9lPzuKpdrn47jsYNQrC3p3EaloQ6ZaLUqVg717YdKYUJ1cc4/vZUfh5X+azfS3x84NLl5x7SwaDwTVxmCgopWYppS4rpYLt2gKUUtuUUkFKqV1KqUBLu1JKTVFKnVBK7VdK1XSUXVmS48d16MiSiDvrXZdyhW4wYEkbTp3SaYOPPoLCr/emhdc+Tn27lp07de9D3N3J0eYpevf34NcBS9njHkh4uDB8uHNvyWAwuCaO9BTmAK0TtE0A/k9EAoDRlm2ANkBFy2cQ8D8H2pX1OH5cJ5ktjB4N/97Jydq1Onf85puWHcWKwaVL5OjemUTrXFWujH/MHt554So//KDHvRkMBkNqcJgoiMhG4FrCZuBRy3p+INSy3gGYZwl3bQMKKKUec5RtWYo//oCzZ6FKFQCCg+G77+C116BpU+5/+CeXALN0dRvZZCsVK+qeqgnLJhkMBkNyZHZOYSjwmVLqPDARGGlpLwHYV3gLsbTdh1JqkCX0tOvKlSsONdbhHDwI7drpONCQIYAWBHd3ePvtNJzPIgq5Th/mf//TQx8yoSyMwWDIRmS2KAwBholIKWAYMDO1JxCR6SJSW0RqF7EmZl2V33/XI5h/+82WZP7tN2jcGAoXTsP5ChTQIaajR2neOJpGjWDKFD0EwmAwGFJCZotCP+Bny/oSINCyfgEoZXdcSUtb9mb9eh02ekxHyk6d0uWOnnkmHeesXFkPZCtUiGHPXeHcObAbJ2QwxCudrZSKVwQuLCwMDw8PXn31VQA++OADSpQoQUBAAFWqVGHIkCHprnhqj30RubZt23Ljxo0kj126dGmaSlPbl8uwZ9y4cVSrVg0/Pz8CAgJsdZ++/PJL2yC31PLBBx/cV1o8sWOsv6mvry/Lly9P9Livv/6aefPmpcmO9JDZohAKNLasNwMso7ZYDvS19EKqB/wrIhcz2bbUExEBFSrA5Mm63MTYsSn/bnS0rnfUpImt6fff9bJdu3TYVLWqTiTcukW7vOsoW1bXzTMYEsPHx4ffrX94wJIlS6hWrVq8Y4YNG0ZQUBCHDh3iwIEDbNiwIU3XetBo4RUrVlCgQIEk96dVFBJj69at/Pbbb+zZs4f9+/ezZs0aSpXS76XpEYWUYv1NlyxZwoABA+4T2ujoaAYPHkzfvn0dakdiOLJL6gJgK1BZKRWilBoIvAh8rpTaB3yM7mkEsAI4BZwAvgVco5hPaKgO3A8dCi+8AF98kfLv7t0L4eHxROGXX/QzPZFKAyln1CjtKeTIgfuBILp319M0XF25E3r10uEqg8FCnjx5qFq1qu1tfdGiRXTr1i3RYyMjI4mIiIhXXttK//79GTx4MLVr16ZSpUq2kbpz5syhffv2NGvWjObNm3P37l169OhB1apV6dixI3ftekKULVuWsLAwAObNm4efnx/+/v706dOHLVu2sHz5ckaMGEFAQAAnT57k5MmTtG7dmlq1avHkk09y5MgRAE6fPs0TTzxB9erVkyyFffHiRby8vGxVX728vChevDhTpkwhNDSUpk2b0rRpU0DPI2Gd3Odtu2RfYuWx7fn2229p06ZNvHtMSNWqVcmRIwdhYWE0adKEoUOHUrt2bSZPnhzP6zhx4gQtWrTA39+fmjVrctJSGPOzzz6jTp06+Pn5MWbMmCSvkxocVuZCRHomsatWIscK8IqjbHEYCRPdN27oUtePPpr48fasX6+XjbXjdPkybNign+npolQp6NEDxo2Dffvo9qGurr30q3MMXLFAb5Qq9eDzGBxOFqicDUCPHj1YuHAhxYoVw93dneLFixMaGmrb/8UXX/D9999z9uxZ2rRpQ0BAQKLnOXPmDDt27ODkyZM0bdrUNu+A9W28UKFCTJo0iTx58nD48GH2799PzZr3D0k6ePAgH330EVu2bMHLy4tr165RqFAh2rdvzzPPPEOXLl0AaN68OV9//TUVK1Zk+/btvPzyy6xdu5Y33niDIUOG0LdvX6ZOnZqorS1btmTs2LFUqlSJFi1a0L17dxo3bszrr7/OpEmTWLduHV5eXoSGhvL222+ze/duChYsSMuWLVm6dCkNGjRItDy2lf/+97+sXr2apUuXJltufPv27bi5uWHNj0ZGRtoE+oMPPrAd17t3b9555x06duxIREQEsbGxrFq1iuPHj7Njxw5EhPbt27Nx40YaNWqU5PVSghnRnB4sbzX8/jvMmqXXz55N/Nh//4WiRcFalnjDBh3/9/YG4Oef9Zw6XbtmkG3+/rB/PzVqQLlysGRfJd1+7lwGXcCQXWjdujWrV69m4cKFdO/e/b791lDH5cuXuX37NgsXLkz0PN26dcPNzY2KFStSrlw525v7U089ZSsfvXHjRp6zzBro5+eHn5/ffedZu3YtXbt2xcvLC4hf5tpKeHg4W7ZsoWvXrgQEBPDSSy9x8aKOOG/evJmePfU7aZ8+fRK1NW/evOzevZvp06dTpEgRunfvzpw5c+47bufOnTRp0oQiRYqQI0cOevfuzcaNG5Msjw3ay/njjz/48ccfkxSEL774goCAAN566y0WLVpkqyCb2O9/69YtLly4QMeOHQFdnTVPnjysWrWKVatW2ea6OHLkCMetddTSgSmIlx6snkLVqnHdhc6c0aWuE3LihD5+6VJo0ULnE3r0sO1etEgPavb1zSDb/P1h/nzU9Wt061aIz8Y/zlUKUfjcOWjQIIMuYkgPWaVyds6cOalVqxaff/45hw4dSjLx6eHhQevWrdm4cSM97P52ragEg2qs246YRCY2NpYCBQokWlE1MVsSw93dnSZNmtCkSROqV6/O3LlzbbPBpYfq1asTFBRESEiITTQSMmzYMN5666372lPzW4kII0eO5KWXXkqzrYlhPIX0YBUFLy8oW1avJ+UpWN5i2LxZxwxu3rTlE4KCdDSpf/9EBqulFesb2L59dO0KMeLOUp5N2j7DQ82bb77J+PHjE30rtyIibN68OdHy2qCT1LGxsZw8eZJTp04lOm9Ao0aN+OGHHwAIDg5m//799x3TrFkzlixZwtWrV4G40tP2ZbIfffRRfHx8WLJkic22ffv2AdCgQQObNzN//vxEbT169Gi8t+qgoCDKlClz33UCAwPZsGEDYWFhxMTEsGDBAho3bpxkeWyAGjVq8M0339C+fft4Ybi0ki9fPkqWLMnSpUsBuHfvHnfu3KFVq1bMmjXLVm32woULXL58Od3XM6KQHsLC9PSZefPq0FCuXEk/dK1/HMHB2lsAWz5h4kQ9RcLgwRlomzXuu3cvNWpAeffTLKK7CR8ZEqVatWr069cv0X3WUIevry8xMTG8nMSkTqVLlyYwMJA2bdrw9ddfJzphzZAhQwgPD6dq1aqMHj2aWrXuSzFSrVo1Ro0aRePGjfH392e4pZBXjx49+Oyzz6hRowYnT55k/vz5zJw5E39/f6pVq2ab83jy5MlMnTqV6tWrc+FC4j3bw8PD6devH48//jh+fn4cOnTIFsMfNGgQrVu3pmnTpjz22GN8+umnNG3aFH9/f2rVqkWHDh3ilcf29/e/L+zTsGFDJk6cyNNPP21LnqeH7777jilTpuDn50f9+vX5559/aNmyJb169bIl1bt06RJvbok0k1T5VFf4OL109vPPi5QoEbddqZJIly6JH/vBB3G1rx95RKRKFREROXdOxN1dV8vOcEqXFunRQyQ6WkbxkYBI3QKH5dgxB1zLkCKya+nsfv36yZIlS5xthiERTOnszCQsLK7cNegQUnLho0cfhRw5ICoKLJOIWOPKQ4c6wL46dWDHDrh8mff4kM8ZzolbxWjVCv75xwHXMxgMLo9JNKeHK1d0PsFKmTJJ9zEMDdWi0bev7nXUuDE3bsD06XqqZUs4M2MJDISffoLgYHJxj+ElFtPwxl6a/LOOF16AX3/NwByG4aEmsZ47BtfEeArpIaGnUKaMHnCQ2GjIixd1OYs337TVsRg9Gm7fTmPxu5QQaKkiYu1NUrcugbfX89Gou/z+O1hydIZMRixz9BoMjiYtf2tGFNJDQk+hkmUswNGj9x978SIUL27b3L4dpk6FV16J6yiU4dSqpV0BO1EAeL3tCWrX1qW1k8jDGRxErly5uHr1qhEGg8MREa5evZpowj85TPgorURF6QFp9p5C9epcoyCvvlyAGp105YuCBdGlJf75J17huw4doGRJPaOaw8iXD554ArZs0dstWgCQY/0a5s+vTs2a0K8frF5twkiZRcmSJQkJCcHly74bXIJcuXJRsmTJVH3HiEJasXYzs/cUKlRgqvsbLNjmw4Jt8P33sPaHfyh8cKMWhsce4/ZtXfAuKgrWrYP8+R1s5zvvQPv2uqx2zZpQvz5MnUqlN95g/Hg3Xn1VD7Ju0yYF54qIgD179DkMacLDwyPJAU0GQ1bAhI/SivVNz85TuBeTg6nqFVp77WTlSh1F6tzyJrHdLaM/ixfntdfg8GE9grlq1Uyw85ln9Ojm0qX19muv6SJ+lSsz6NqnlCsH776rS2w8kK+/hoYNdd7EYDBkS4wopJVEPIVffoFL0V4Mi51Eq1Y6Z7AhtBIzGQjAjusVmT1bJ5YtkRzHo5SeuWfRIr3dubN2VcLD8Zg7g48+0h2m7GpvJc3OnXqkhUlEGAzZFiMKacU6GYhdWYCtWyGPRyTNry2G775jQOtQGquNDFFf82yJHQz+6nGKFNFv5plKyZK2OaDx8NCJ52HD4ORJejT5hwEdrvLhh7p7bLLs3auXly451FyDweA8jCiklZs39dKuTPb+/VC93B3ciYW+fVEdn2WJdGZ4myPslDrs3efO2LE6/+t0LHkB1asn05YVp02RXbz0km1M3f3cuRPXq8qIgsGQbTGikFb+/VcvLaIgAvv2gX/DfDBypI4P7dxJEcKYMF4ICdFpiAwuaJh2atXSo6vXr8ezVDGWXXmCllXP89ZbcP58Isfv3x+XeDDDoQ2GbIsRhbRi9RQsr/0hIXD9OvjXdIePP46LEXl6QpUqKKXTD1mm62fu3FCjhl7/8ks8Cj3K137TiI0V+veJ4fbtBMfbj9Q2noLBkG0xopBWbt7UD1YPD0C/SIPdQLTGjXUs389Pv5FnRdq1g2rVdJfVmjXxObGaaZUms34DNG0qXNr3j7a/VSuYMAEKFiS2bDk27i9AZKSzjTcYDI7AiEJaSTDtpqWUe5wouLnpukPffJP5tqWU99+HAwe0aNWoAfv30//gCH6hI8H7YniinrDxaDFdbrtYMZg7l3ejPqDxX6N5+mnIiCq9BoMha5FFX2FdgASiEBysSx/Fm57ZWnsoK2ONZ9WsqUfUAe0LbWb9tfp0ZQmNWY33DSgA3H0Nzl6AJnl2sG5dIK++CnPnOs90g8GQ8RhPIa0kEIXjx3XxU5fFOoG6tzf88guB/R7n8NJjfPEFtG2rPaBGjWB83Z9Znasdb74J8+bpAc4GgyH7YDyFtHLzpq1GhYgWhd69nWxTeqhQQY/O7txZP/0bNSIPcN80Dx/sh+2XeXdEFDNnevCf/8CaNU6w12AwOATjKaQVO0/h6lXdQ7ViRSfblB7c3PRr/4QJyR/n7Q1A/nuXefdd+Osv+PvvTLDPYDBkCkYU0oqdKFjn/65QwYn2ZAQlS0KePMkfU6yYXl66xODBejNFJTIMBoNLYEQhrdiJwokTusmlPYWUYin/zcmT5Mmjq2WsXQtHjjjXLIPBkDEYUUgLIveJgpubnm0z21OzJpQqBVOmAHo+Bnd30wvJYMguGFFICxEREB0dL3xUurQevJztyZkTRoyATZtgwwa8vfVcDPPm6SkjDAaDa2NEIS0kKIZ34sRDEjqy8sILUKIEDBkCd+/y/PMQGgorVjjbMIPBkF6MKKSFBKJw6hSUK+dEezKb3Llh1iw9W9Do0bRrpzVi6lRnG2YwGNKLEYW0YCcKt2/rLqllyjjXpEynZUtdO2nZMjw8YPBg+PPPuOraBoPBNTGikBbsROHsWb360IkCQN26OqHy77+8+KJ2IEaNcrZRBoMhPRhRSAt2cyk81KJgLY0RFESxYloQfvpJewwGg8E1MaKQFoynoLGKgqUA0ltv6fpPz3WN4OSYeU40zGAwpBUjCmnBKgr583P2rJ5SwTqm66GiWDGdYd69GwDPaxdZPu4AsbduU3dsW776ysn2GQyGVGNEIS3Yzbp29qwey+Xu7lyTnEbNmrBuHTz3HBQvTqUufqyjKVXdj/H663D5srMNNBgMqcGIQlpYtQp8fMDTkzNnHtLQkZVOnfQ8pIsXw9Ch8O67+FW6x8j8/wPi6kIZDAbXwJTOTi3798OGDfDZZwCcPat7Zz609O+va11ERenRzgD//kvF77cDemBfgwbOM89gMKQO4ymklmnTdCXRgQOJjISLFx9yTwH07G1WQQDw9KRs1HHc3Y2nYDC4Gg4TBaXULKXUZaVUsF3bIqVUkOVzRikVZLdvpFLqhFLqqFKqlaPsSjf790O9elCwICdO6Np4Ll8yO6Px9MQj8jZlywpDFIIAACAASURBVMZVkDUYDK6BIz2FOUBr+wYR6S4iASISAPwE/AyglHoc6AFUs3xnmlIqa6Zur1yBokUBOHhQN1Wr5kR7siK5ckF0NBXKi/EUDAYXw2GiICIbgWuJ7VNKKaAbsMDS1AFYKCL3ROQ0cAJw/Kz3Z8/qV/0DB2DpUl359EFcuaKnrQSCg3XJ7CpVHGynq2EpF1uxXDTHj+uf2GAwuAbOyik8CVwSEet7ZAngvN3+EEvbfSilBimldimldl25ciXtFly8COXLw8cfQ8eO+lO3bvLCEBmpRzNbROHgQX2K3LnTbka2JFcuACqUjuLWLa2jBoPBNXCWKPQkzktIFSIyXURqi0jtIpaHc5o4ckRPAPD++3DypJ4UYM8eXfI0KcLC9NLOU/D1TbsJ2Rarp1AqAjDJZoPBlch0UVBK5QA6AYvsmi8Apey2S1raHMfp03opAv7+Whwg+TKf1lfeIkWIiNBJVCMKiWARhXKP3QXifmqDwZD1cYan0AI4IiIhdm3LgR5KKU+llA9QEdjhUCtOn9YJgR9/hO+/j0sMpFAUjh7VjoZJMieCJXxUpnA4AGfOONEWg8GQKhzZJXUBsBWorJQKUUoNtOzqQYLQkYgcBBYDh4CVwCsi4tjJHU+d0vUpOnfWr/sFC7I6fxcKjhpCly46onQfdqJgnWWsTh2HWumaWDyF3CoCb2/jKRgMroTDRjSLSM8k2vsn0T4OGOcoe+7j9Ol406WdOwc9bs8gv/tN1qx5hBYtYMsWu0J3R4/CpUsAxBYuwrffQtOmD9mMaynF4ilw7x5lyxpPwWBwJR7eEc2nTun6RRZeeQUilSerH+nIX39pp6B53VtceGks/PKLDi/973/g5saaPYU4fRoGDXKi/VkZi6dARAQ+PsZTMBhciYdTFO7c0W/9ltf8lSvht99g9FPbqHhtO7XK3+D3ReGEhIDv9Nfo2zmcxXRl6bGqXChQjVHvu+HtrXuxGhLBKgoWT+H8+ZQNATEYDM7n4SyIZ41n+PgQFQXDhulSFW8MuAUrgM2babx2LZtkDZ+XncKvZ57mO/oAkPN6JJG74Icf4p59hgTYhY98fLQghIZC6dLONctgMDyYh9NTsI5F8PHhm2/0kIWJEyFnq6ZaHXr2hEmT8HuxLnNPN+bSVQ+2vziDjTxJw/wH6NwZevRw7i1kaRKEj8CEkAwGV+HhFIVixeD557lepBJjxuiEcfv2QN688PPPuupnr14wdSoAHoXyEdjdhyfZxF/NP+HHH/UhhiRIkGgGk2w2GFyFhzJ8FOlfhzuT6vB/H+j5YSZNsnvIV6+u8w3WB5uVwEA9rsFSDM+QDHaeQunS+mdLtIuvwWDIcjyUorB0KXTvrtcHDoSAgAQHJBQEgHz5dCLB39/h9rk8donmnDn1fBOm1IXB4BqkSBSUUg2BiiIyWylVBMhrqWbqkgQEaO8gd249tXCKsSqJIXnswkcAlSoZUTAYXIUHioJSagxQG6gMzAY8gO8Bl51ksVIl/TE4CLvwEejfessWXWbK5GIMhqxNShLNHYH2wG0AEQkF8jnSKIOLY52a0+IpVKwIt27B5ctOtMlgMKSIlIhCpIgIIABKqUcca5LB5XFz08JgFz4COHbMiTYZDIYUkRJRWKyU+gYooJR6EVgDfOtYswwuj6enLXxUsaJuMqJgMGR9HphTEJGJSqmngJvovMJoEVntcMsMrk2uXDZPoUwZ8PAwyWaDwRVISaLZB/jbKgRKqdxKqbIicsbRxhlcGDtPwd1dDxQ/csTJNhkMhgeSkvDREiDWbjvG0mYwJI2np81TAD1lRXCwE+0xGAwpIiWikENEIq0blvWcjjPJkC2wCx8B+PnpUc23bjnRJoPB8EBSIgpXlFLtrRtKqQ5AmONMMmQL7MJHEDcQ/MABJ9ljMBhSREpEYTDwrlLqnFLqPPA28JJjzTK4PAk8Baso7N/vJHsMBkOKSEnvo5NAPaVUXst2uMOtMrg+CXIKpUpBgQKwb58TbTIYDA8kSVFQSj0nIt8rpYYnaAdARCY52DaDK+PpCeFx7w9K6byC8RQMhqxNcuEj68jlfEl8DIakSRA+AqhRA/buva/ZYDBkIZL0FETkG6WUO3BTRL7IRJsM2YEEiWaA5s1h8mTYtEmvGwyGrEeyiWYRiQF6ZpIthuxEIp5C06Z6ZPOqVU6yyWAwPJCU9D7arJT6r1LqSaVUTevH4ZYZXJsEiWbQs53Wrw9//ukkmwwGwwNJySQ71nnJxtq1CdAs480xZBsSCR8BtGoF774LoaFQvLgT7DIYDMmSEk+hq4g0TfAxgmBInkTCRwDtLcMgf/45k+0xGAwpIklRUEq1U0pdAfYrpUKUUvUz0S6Dq2MNH4nEa65WDR5/HJaY6lkGQ5YkOU9hHPCkiBQHOgOfZI5JhmyBpyfExkJU1H27unWDv/+GixedYJfBYEiW5EQhWkSOAIjIdszYBENqqFJFL/v3v08YunXTDsSiRZlvliEbs38/NGyoXVFTpz3NJJdoLppgNHO8bTOi2ZAsXbrA+PHw9tu6H+qcOXpYM1C1KtSuDXPnwtChzjXTkI346SfYvFmvb9sW92JiSBXJicK3xPcOEm4bDMnzn/9AZCS8/z7UrAmVK8OePfDuu/TvD6++CkFBEBDwwDMZDA8mOBhKloSQELh0ydnWuCxKEiQCXYnatWvLrl27nG2GITlEoEULOHhQewqXLsHly1xz8+Kxx+D55+Hrr51tpCFbULmyns1p1Sp44QX4whRiSAql1G4RqZ3YvpR0STUY0o5S2lO4dAn++UeLxJo1FCoEAwbArFlw5oyzjTS4PHfvwokTWhS8vfXfmiFNGFEwOJ7GjaFdO60CBQvahjS/9x64ucHo0U62z+D6HDmie7sZUUg3DxzRrJTyFJF7CdoKicg1x5llyFYoBcuX6/Vbt7R7L0KJEorhw+GTT6B7d3j6aeeaaXBRBg6ELVv0ulUUDh50rk0uTEo8hZ+VUh7WDaXUY8Bqx5lkyNa0aaNrXGzdCsCYMVC9uv5/feOGk20zuCazZmlPIWdOqFABihUznkI6SIkoLAUWK6XclVJlgT+BkY40ypCN6doVHn0Upk0D9Bi3OXPg8mX4v/9zrmkGF6VMGb184QXd/dnbG65fNxN3pJEHioKIfAusQYvDr8BgEXlg8WOl1Cyl1GWlVHCC9teUUkeUUgeVUhPs2kcqpU4opY4qpVql/lYMLkHevHpA2+LFetad55+nZpmrvPgifPWV7qJqMKSKqCjtak6dqre9vfXSdEtNE8nVPhpu/QC5gNJAEHq+5uFJfc+OOUDrBOdsCnQA/EWkGjDR0v440AOoZvnONMsEP4bsyKuvQo4c4O4O338PXbvy8cdQpAj06gV37jjbQINLER2t/56sWEXBhJDSRHKegv3Um3mBn4ETpHA6ThHZCCRMRg8BPrUmrkXksqW9A7BQRO6JyGnLdQJTcR8GV6JiRbh5E3bt0nW0N2ygMFeZNw8OH4YRI5xtoMGliIrSYSMrxYrppfEU0kRy03E6IsJbCXhSKTUOiADeEpGdQAlgm91xIZY2Q3bF+mbXpg2MHQtr1vBU9+4MHw6TJunmZ55xrokGFyGhKBhPIV08MKeglFqtlCpgt11QKZXWubNyAIWAesAIdAJbpeYESqlBSqldSqldV65cSaMZhixDnTp67MLKlQB8/LF2JCZMeMD3DAYrCUWhaFG9NGV400RKeh8VERFbZ0ERuQ4UTeP1QoCfRbMDiAW8gAtAKbvjSlra7kNEpotIbRGpXaRIkTSaYcgyuLtDy5a6mNnLL+N55zqdO+seqzdvOts4g0uQMKfg6QkFCoB5aUwTKRGFGKVUaeuGUqoMejrOtLAUaGo5TyUgJxAGLAd6KKU8lVI+QEVgRxqvYXA1hg7VZVNnzIAuXWjdIproaFi71tmGGbI8IhATE99TAPDy4qe95Zg71zlmuTIpEYVRwCal1HdKqe+BjaRgnIJSagGwFahsmbltIDALKGfpproQ6GfxGg4Ci4FDwErgFRGJSdstGVyOevW0Anz7LaxdyxMnviNvXltEyWBIGutcHQlEQQp78fquPvTvDxMnZr5ZrswDy1yIyEqlVE10HgBgqIiEpeB7PZPY9VwSx49Dz/ZmeFh57jkYMICcF07TrBmsWeNsgwxZniRE4XCuGoTe05V433lHl90qVMgJ9rkgKS2IVx9oYvnUS/ZIgyGtuLvr/7lhYdSrBydPmtIXhgcQHa2XOeK/366+2xCAyZN1dOmPPzLbMNclJb2PPgXeQId2DgFvKKU+drRhhocULy8IC6NGDb1pRjgbkiUJT2F1WAAV1XE6dxK8veHXX51gm4uSEk+hLfCUiMwSkVnoEcemB7nBMRQuHE8U9u51rjmGLE4ioiACG0LK01zW4BZxh2ee0Z5CZKSTbHQxUho+KmC3nt8RhhgMgPYUrl6lWDF47DEjCoYHYA0f2YnC5csQHunJ4xyCsDDatdPdm63TN2cZoqPh9m1nW3EfKRGFT4C9Sqk5Sqm5wG7AhI8MjsESPgJdL8+IgiFZrJ6CXU7h7Fm9LMNZCAujaVOdrspyHRc+/BD8/LRrk4VISZXUBejk8s/AT8ATIrLQ0YYZHlKsoiBCjRq6FtLdu842ypBlSSR8lFAU8uXTvZ5XZ7VZYHbtglOn4NgxZ1sSj5Qkmv8SkYsistzy+Ucp9VdmGGd4CPHy0sHf8HBq1NA9Rw4cyKRri5ga/K5GCkQB4Kmn9DP4+vXMNjAZTp3SyywW10qudHYupVQhwMtS76iQ5VMWU6zO4Ci8vPTSGcnmpUt13RzTD9Z1SCSncPYsPJovlgL8axOFFi205v+VVV5nY2Ph9Gm9vmmTc21JQHKewkvo/EEVy9L6WQb81/GmGR5K7ETBxwfy589EUdi/X2ckDx3KpAsa0k0SOYUyZRW4udlEoW5dPQTGOlV4pnHhgn74J8wbXLyovVKlXMdTEJHJIuKDLm9dTkR8LB9/ETGiYHAMhQvrZVgYSmVystlaf//o0Uy6oCHdJBE+KlNG2bo3g9aMZ56B336L+0qm0LgxlCunL24vDNbQUdOmOqeQhYr3JRc+qqOU8haRryzbfZVSy5RSUyxhJYMh47F6ClevAloU9u+PixI4FCMKrkeSooD+W7J72HbsqHMKGzdmkm3h4XpYfqVKsGJF/GJeVlHo2lUvMy1x9mCSCx99A0QCKKUaAZ8C84B/gemON83wUGIXPgItChERmfScvmyZCNCIguuQIKfw77/6U6YMOj90Ia4Cf8uWkDs3LFqUSbadOKGXY8ZA2bJ6afUWTp3S4a3WrblOAV4aXYyFC3XHCmeTnCi4i4h1Os3uwHQR+UlE3gcqON40w0NJ/vy6U7lFFGrV0s27dmXCtTPKU4iO1n3Q163Lcn3Qsx0JcgrnzunNMmUAf3/Yt88mHHnyQO/eMG9eJs2/Y+1qWq2anpd8504IDdVtJ09CqVJEFS9DV/efmb65Gj17wvDhmWDXA0hWFJRS1uxNc8C+uv0Dq6saDGnCzS1eLLhKFa0TW7dmwrWtonDiRPx41e7d0KqVfutcvDiuIJOIfvBbX++uXdNJxR07YPRoaNYMpk3LBMMfYhKEj6wP++LFgcBAPcjFruPA22/rr0yalAm2HT+ulxUqaIGybzt2DMqV48vJir9imjKjykQGDtR/LtbIkrNIThQWABuUUsuAu8DfAEqpCugQksHgGIoWtc2v6+ame444XBQiInTPo3Ll9FPjzBndHhMDL74Iq1ZBly7QvXvc69zq1frB/9lnsGGDfiOsV08nQQDy5uXSyr1m/nhHkkAUrNMyFyuGnuoV9Bu6hQoVtLcweXImeJ/HjkGJEvDII1CxItcpwOsfejF3ajjhu45wo3YLPvkEWpfYz8AbnzN2rHZ4PvjAwXY9CBFJ8oMeydwReMSurRJQM7nvZdanVq1aYsiGtG4tYvdvO2aMiJubyM2bDrzm2bMiIPL883r5ww+6/dtv9XadOvIv+WQufSSQbfJYsWjpXiVIjlBJjntUlWWqg3yS4z1pyUop6XlZxuX8QAaWWCE51T0pWlTk5EkH2v4ws2iR/vcJDhYRkQkT9ObNmyISEyNSoIDIoEHxvhIWJlKypEi5cnrdYTzxhEjTpno9JkYGu30j2r0UKUSYVCp9V0Bkz+uzdeP16/L223p1+3YH2iUiwC5J4rma7IhmEdkmIr+IyG27tmMissdxMmV46ClVCs6ft20+8YQe67PDkRO0Wl/n27WD8uXh88/1/99vviHWvwYznltPcfdL9GMe/5Kf5mVPseJ4BapwlIpRh+ggSxkZ/SGn8aHsvSOMihzDgkvNeC7nYqKjoU0bU67DISTiKeTODXnzot3M2rXjeQqgo5OLF+to4LPPOnAQ+7FjULEiAHv3ufFN7Au85vMbfzd5n2a5tlC2siezZ0ONFpZu2IcPM2oUeHvDa685L+mc0iqpBkPmUaqU7glk+d9at65udmgIySoKxYvDyJHE7t7D5+3W027XaMqdW8eLb+ShbuPcbNksHCrXju/kOY5ShU8ar2TWjFi2bYMbV2M49khNNtKI/R3HcHn0VGbe68PiOXc4dgw+/dSB9j+sJBCFS5f0Q1Upy/4nn9Q5IGteYflymDCBJ/LsY+5cPZj4k08cYNelS7pbtUUUJk+GvDkiGBv9Lg13T2ZJn1/5c5Wif3902BEgOJh8+XS+Y8cO+L//c4BdKSEpF8IVPiZ8lE2ZPVv70CdO2Joef1ykbVsHXnPmTH3N06cl5u49aZ93jYBINQ5I+5Z3ZP58HY0QEZH//U9scYA//oh/nsaNdfsXX4gsXKjX9++Xnj1FPD1tUY44IiMdeFMPAdOn69/4/HkREWneXKRePbv9V66IPPqoSIcOIkuXxv275c0rcu6c9OolkjOnyNGjGWzXJ5/o6xw4IOHh+nID/XbEXX/LlrhjY2NF8ucXeeklW9OAASJKifzySxLnf/ttkVWr0mweaQ0fGQxOoVQpvUwQQtq2zYE9PK2eQtGi/PJ7TpaHN+cT78kc6Px/LPszN7166WgEAC+9BEOGQL58UL9+/PMEBuqlry/4+Oj1M2f4/HMoUADat7eNy9NdTby8MJnodJBgOk6rp2DDywtGjIBly3SsqGZNPVAsNhZefpnPP9dOxoQJGWzTtGm6E4KvL0uX6nFsfVpbBtI98YT+WFFK27V7t63pv//VefJeve6LfkFwMIwfH+/4DCUptXCFj/EUsilHj+q3qXnzbE0zZuimI0cy+Fp37+o3tTfeEMmbV6KjRapVE6lSRSQ6KlYkOjrx78XGJp753rRJpFIlkWvXRC5d0kZPniwiIlu3am+hZrW7cvXHtSL58kksyLH35sqlKQvl8vZTEhWVwfeX3Zk8Wf/Gloyxl5fI4MEJjomK0n9LH34oEhKi2z76SH/v5Enp1087E3fuZJBNy5bpc1te89u2FSldWiRm1x7dvnTp/d8ZMUK7LPfu2f7m/vlHpGxZkWLFRE6ftjv2hRdEcudOV5acZDwFpz/Y0/MxopBNuX1b/2mOG2drOnhQN82ebWlYtkykRQuRffvSfp0bN7Tb/t13Ip06iVSqJH/+qa8zf3667kATGyuSJ4/IsGG2pt9/uSc5iZBc3JG6apuUz3HaFlEAkWeeyYDrPkxMnKh/uH//lchIvTpmTAq+d+iQPnjGDPnrL726cGEG2fTccyKFColERsr16yIeHiJvvmnZZwlz3Yc11BgYqJcVKoicOCGHDukOVH5++r+FXL0qkivXfT2qUktyomDCR4asR548uqSlXfioShUdftmyBVi/Hjp00FNppWc6rd27dU2Edev02ILq1fn5Z92tvGPHdN+FDguULasHtIWGwhtv0HbfJ2yhPi81OEi+WpWoXCGGaQxhCq/xbKndrFhhokmpwi7RbC1zFC98lBRVqugD166lSRMdsZw3LwPsuXdPJ7M7dAAPD1sBvs6dLftLlkz8e9ah+zt2QL9+ukjTU09RtUgYCxbAgQNCz6YXOT57kx5TM3BgBhibBEmphSt8jKeQjfH3F3n66XhNTz8tUr68SOznk+JerUeMiDvg+nUdOwgL00m7995L/hrWTu2VKokoJdFjxkqxYiJdu2bgfXTvrrOMDRvG2ezvr70IEZGLF0Xq1xcB2d9imIDItGkZeP3szocf6t80MlJ279arP/+cwu/27Cny2GMisbEycqSIu7v+50gXv/+ujfj9dxERefZZkRIl7DopJEVsrI4TtWyp17dv1wZZks+flZsmHtwTN6Kln+cCea53bLq8WYynYHA5SpW6rw5927a6ZMyxfXf163yZMnFDWAF++AG+/hpmzoRZs+DLL+HOnaSvYU3UHTsGIqxTzbh0CTp1ysD7+Owz8PTUfR9ffVWXO/joo7g+k97eup5+gwb4xuyjSpVMLNiWHbCrfWT1sFLkKYAuW33xIhw9St++elzAggXptGfBAl2XpXlzzp3Tpbq7dbPrpJAUSukh1kuX6vXAQD1YYfp0WLuWt86+xjlK8zLT+D6yK+vWK1v9xgwnKbVwhY/xFLIxX34pCZPNZ87oponVZuk+qnXrijz1VNx3nnpKH1CokO2t/Nq3P8qRI3Zvanv3xnUHrFBBYj1zyUyel5f4n+R9JEYee8wBI6c3bxYZNSrppLWIdoNq1JB339Wjt2/dymAbsisjR4rkyCEiIrNmiTV3nDKCg8U+gRQYKFK9epwTl2pu3NDx/iFDRETklVd0PuHcuTSe7/p1kSJFdBYcRAoXFgGJnDE3jSeMA+MpGFyOV1/VA49eecU2sW6ZMlC9Ovx21ldveHuz7/SjhISgp9Bctw5y5oRr17iYswwdc62g0IudbeHj59rf5L9PfM83Db/jgw57+ehEd/oWX81AZrGY7gTWVezYoXuaZij162vvwN096WMKFoQbN2jYUPeWzJSqsNmB6Oh4A9fAUvcoJVSooP9NjhwBYPBg3Vt1xYo02rJggY73DxhASAjMmAH9+8f1sE41BQrokXU3b+p6YOPHQ548eDzdMo0nTCFJqYUrfIynkM3ZuVO/IX3zja3p/fdF3IiWw93HyJ7OH0lOIqRAAZHFL6+VGJQcGvSF1GKngIine5S8y0cyo9uf0rvidimirsTr6QMiSsXK8ByTJaZ+QyfeqIi8+qpIgQISFqbt+vhj55rjMgwdKpIvn4jYehWnjooVRbp0ERE9jtDHR5fdSrW3EBkpUrWqzdUYMED3MI3XlTQtxMSItGql82NJdYNOA5guqQaXJDZWDxho1MjWdPnULXmEW9K8/GkpX/CqFCdEavhGCogUcb8quXLFSlF1Wca13yaH990TadBA/5nnzi2x7dpLyK975OyhcIn+foFETp4mEeFR+j/cnDlOvFHRaqeUSEyMVKok0r69c81xGV55RYcLRef0K1RI5ffbtRPx9bVtWgfTT5mSyvN88YVYxyDs3atDgLZuqFkQIwoG18Xau+TMGb0dHCzv8pEWgbx3ZBP1JfKZjjLfvY/0a39VXntN5NypqLhXvUuX9ACnf/5x3j2khM8/F2ulzH79RIoWTUds+2Fi0CDda0dEmjTR7wCp4j//0a/0llGDsbF6rEjOnDr9lCSjR+sRaX366J5GefOKtGold+/Eiq+vNunq1bTdUmaQnCiYnIIha2Odw3bVKr08e5b3+Ij5Y45x8ps1NGALHn8sp9ezd5izrBBTpkApnxxxvXuKFoXXX09FoNlJFCyolzduUK+ergd4+rRzTXIJ7HIK//yTip5HVqpUgchI2/wZSsGcOXqYzIABScwNfu6crm6YNy/8+CM8/TQUKoTMmMnLryiCg2H2bH0OV8SIgiFrU6mS/t+1fbvePnuW3ETQa1Be8vlY5nOOiYEGDZxnY0ZQoIBeXr9OvXp6dds255njMkRFJV33KCVUraqXhw/bmgoX1rWH9u7Vy/v48EO9XLkS9uzR6vHnn7w7tQSzZ+tJ99q0Sf2tZBWMKBiyNtY+29bJFA4d0j2MvL3jPwFcXRTsPAVfXz0Mw4hCCoiKAg8P7t3TndRS7RBWqaKXf/6p3/5LloTKlenU+CoNG+q6dpKwCOOvv+rBB6VK6e/PnMmXK6vw6ae6VqLTZ05LJ0YUDFmfunXh4EFdKmLePF2Dws0t7gmQOzfUqOFcG9OLnaeQI4eukJkp81K7OhZRsA7kSrWnUKCA7os6dSqMHKlF4dgx1B8rGDBAT6kc79/h5k3tkljnQEBXWhk+XA96nDrVbi4HF8WIgiHrExioO++/+KL+TzlihG7Pk0cPKggMtMWVXRY7TwH0VM9BQWa2tgdiySnEm5s5tUyZouffHjgQ/v5b56H++IMuXfSf2Jw5dseeOKGXlSoBEBam53yuWlW/ryQ3FMVVyOFsAwyGB2Kdo2DFCh2stRYPA3jrLV06wtWx8xRAl9uPjtYha1ePjDkUS04h1SUu7PHwgCVL4rZbt4bffiNfnhi6dHFn0SJdMSVPHrTrALYZ1T77DK5cgdWrdcgvO2A8BUPWx8tLB3fnzYNffom/b/RoXZHS1cmXT4fELJ5CpkxBmh2whI/S5SkkpG1buHYNduygf3/tnC5datlnFYXy5bl0SSeie/UCP78MuG4WwYiCwTUYMgT69NHF5bIjbm66kJrFUyhWTE/cZpLND8ARotCokV7u3k3jxrqiii2EdPy4zjvkycPkybqqxejRGXDNLITDREEpNUspdVkpFWzX9oFS6oJSKsjyaWu3b6RS6oRS6qhSqpWj7DIYsiwFC9pEAeKmIDUkQ3S0LXyUPz/kypUB5/T21rGgkydxc9P1i9assTgJx45BxYrcuQPffKOdVEt6IdvgSE9hDtA6kfYvRCTA8lkBoJR6HOgBVLN8Z5pSKhukbAyGVFCgQDxRqFcPLlyIN9eQISEWT+HixTTm0Pvi3AAAEuxJREFUExJDKShfXtdpR3dO8vCAyZPRylCxIt99pyNMw4Zl0DWzEA4TBRHZCFxL4eEdgIUick9ETgMngEBH2WYwZElKlrSNrAXMILaUYCcKxYtn4HnLl7f1NPL21j2MZs+K5cJVT8J9qjN2rM77NGyYgdfMIjgjp/CqUmq/Jbxk6YdHCcD+fSjE0nYfSqlBSqldSqldV6zz7xkM2QF/fzh61NYP1d9fh0M2b3ayXVkZiyiEhjpAFE6d0l2hgf/8B9yi7tFYbaT3hhcJDdU9klx9TEJiZLYo/A8oDwQAF4HPU3sCEZkuIrVFpHaRIkUy2j6DwXn4++uH0MGDgB643aSJHkB736hagyY6GnHPkfGiUKGCnm/5wgUAqkQHszq6KeF5irJ8pSdvvhnnyWU3MlUUROSSiMSISCzwLXEhoguA/VQUJS1tBsPDg3W8xb59tqbOnfULa1CQk2zK6kRFcV0KEBnpAE8BbHkFli2jntrBxZN3iY2FiRMz8FpZjEwVBaXUY3abHQFrz6TlQA+llKdSygeoCOzITNsMBqdTrpyuvGknCs8+q0fJ/vSTE+3KykRFERqlIwaPPfaAY1NDhQp6aR3B/OefULMmqljRbBkysseRXVIXAFuBykqpEKXUQGCCUuqAUmo/0BQYBiAiB4HFwCFgJfCKiMQ4yjaDIUvi5qbnG7UTBS8vHUJasuQhDiFFRcF779lCOQn3hUbqarkZ6imUKqW7HH34ob721q3Q0sHTYGYRHNn7qKeIPCYiHiJSUkRmikgfEakuIn4i0l5ELtodP05EyotIZRH5w1F2GQxZGn9/HSuKiXsn6tJFd4+3pBoePjZtgnHjEu//GR1N6L3CQAaLgru7rppaqpS+dnS0EQWDweAEGjXSdRX27LE1deyoe7n8+KMT7XIm1lofS5bEzathJSqKixG6E2OGho9Alz79+28tRo8/DvXrZ/AFsiZGFAyGrETz5nppnWkOXbqhUaOHOK+wZYuu+VGkCIwdG39fVBShEQXJn99SsC6jUQomTYLgYN0d7CHAiILBkJUoWlTPDWEnCqBDSMHBcOSIk+xyFiLaU2jWDF59ldsr1jPro1D699flJ76KeJHD170zNnSUGNk9u2yHEQWDIavRsqV+O751y9bUqZNePnQhpGPHdD2JJ54gvM8QGqrNDHy/OH/+cptVq4TXoyfx19mKjheFhwgjCgZDVqNVK53YXL3a1lS8uJ5X4aERBWtXq02b9OYT9ekzvAj78ePHAi8QejMvoaXqsYta1Ct5nhYtnGhrNsOIgsGQ1XjySShUSM8dMXgwzJ8P6BDSvn365dmluXMHZs3SwpcYIjpc1L+/Hh9QogQ/7KnC0qUw4TM3Ol+fgVqwAHbsoBZ72Dp4Hu+8k6l3kK0xomAwZDVy5IB27eCHH3R95qlTAejaVYe2f/jByfall0WL9NSX8ea5RJeVmDdP3+D69Xr555/srvkiQ4cp6taFoUMtx/bogc09iIjIROOzP0YUDIasyLPP2oqxsXMnhIdTooTunDRvnosPZNu7Vy/HjYPIyLj211+Hfv3guefAy4vlUa1penMp9Va8j6endi7izYE8apReRkVlmukPA0YUDIasSKtW0K1b3MCpLVsA6NsXTp928cqpQUHw6KO6TLg1SbJ8OUyfDn37EvVkM8Y+tZEOLCeU4gwbco/9+/VQgXg0aQJ//QUjR2byDWRvjCgYDFmR3Ll1mOX113U4af16QA9ky5cP/vc/55qXZmJjtSj06gVeXvz7+yYOH4bwH1dCoUIcf2cmgbf+YsyCqvR+6hJBn/7JhK9yU6hQEudr1kxPuWbIMHI42wCDwZAMefNCnTo2UcibFwYN0rX8P/5Yzx/sdI4e1cnwxx/Xoa4hQ+IKyiXkzBnd1bZmTQ6cyE2The9z7QfI5zaBVkV7sTIwBzlzws8/Q8eOxYDXM/NODBhPwWDI+jRpYssrgE62KgVjxmSR3MLkybpwXM+eevTv9OlJH2upAR5aog4td3xI7tjbzB179v/bu/fgqspzj+PfJ4EghnBHhpLUQARqBSqYcrwgRbHKTUAHBRy8FJFO1amdc8Dm1COFttpysYJWbKFgEVvFWlusRcALRzzHIIYeCFKaKJaLiJCApICGW97zx7vYbGJ2iiZ7r2Tv32cmszdr7YTnmQV55l3vu56Xq6tW8MahCxk50nf4uO66BMUun6GiINLQDRx42rxCdjZMngyLF/sCEWtlZ8KsW+cfoigshPz80/cPdQ5Wr/ZzBwcOwJo1HE/L4JbZvfjnseas5Bpu2fx9nuMGPlq2jqeeaiCjnxSm20ciDd2ll56aVwg6dT448X0qy89hziMtKCz0o4arroJmzRIcW2Wlf3hi8mS/Fdlll/Hc42U8e0MV5fvS6NSknIkv/4jjNGF520/Y9PEINmT8mH2r01nwqyoumPYxPPusbxveT9uyNwQqCiINXbV5BZzDrv4mDzvHxU9s5t/va87w4b5f2ze+4fcTTtgTvhs2+KFK8Au9sM1QxhwdxJdWV3Ju5+OsKM3kd6wGoNn+SvqkFTNkeDpjboNhw9Ig/0X41rd8z6cWLRIUtNRGRUGkMRg4EGbN8juB7dnj9+gExvzicq5vfZyXDpzPmv4/4NktvRg9GrZvT9CinHXBBon9+lFZCbf+ZiA57KR4X29aHjrK4Y5dWZ41hrZzf8jXD75Jy1YGV0S1M+3b1480GsTkiIDmFEQahzvv9GtRx43zTzk3bw5TpsDevTTtks2I3tuY/Woflv3X21RUwKOPJiiudet8Y6bOnZk7F97dlsGCVlNo2dKgqorMHVu44bZMBg2ClqOuhCuuqPnnpFAX0obOXCOu0Pn5+a6oqCjsMEQS409/8u1SnYMxY+CZZ06dO3gQcnNh1CiG71lIYaHfvfKss+IcU34+tGvHnidX0q2bH9C8cPcq37vpiSdg3jy/ZdxnnjyTMJnZeudcfk3nNFIQaSxGjYLiYigogKlTTz+XlQV5ebBzJ/fc47tNv/jiF/x7jh71TetiqajwT88dOuQfr87L4/774dNPYfZs/GR4fj7MnOk7vaogNCqaUxBpTHr2hJ/+tOZzOTmwZQtXXunv6CxZ4jurfi4nTvgWG598cvrWl/feCzt2+Anlhx7iyIflzH/pPHru781ZaZexcKF/+Lp796iflZmZwBlvqS8qCiLJIicHVq0iPc1x003GnDlQVuZ3sTxjM2eeWuV04AC0bu1HBnPm+MZzS5fy6vl3c+fu71L6527AN0l73NGx42cHL9I46faRSLLIyfG3dCoqmDDBrxSdN+9zfP+uXTB9OvTo4f9cWOhfV6yAY8f4dOkLfGfMfq7a8ignmjXnBUYwlencM66M4mJo06beM5IQqCiIJIucHP+6cyfnnw8jRsAjj8Dhw2f4/Q8+6G8fPfec71H95ptUVsLWJW+ystWNfP1Hw/nl0jZMngybxs/kWv7MdKbx88ea0b593LKSBFNREEkW2dn+9YMPAN9Rev9+f0foX/rwQ1iwwG9+07MnVV/rw4zf5dCqleO8v8xlcMVSysuNlSv94xLN+3zFf1/btupSmmRUFESSRdRIAXzXiZtvhp/8BF5fssP3IIplwQI/ZzBlCgA/y5hKwfuTGNbqf3gi/XZe/uVW/v73SJcN6NXLv3bpEqdkJCyaaBZJFp06+R5CQVEAv5Pn2rWOa27tyLdtGWdN6M2JVu1o2dJvgfzlL+OLwfz5MHgw5OXx8ccwc/NQrj37Vf5QdhX2wAPw7bzT/66ePf1r164JS08SQ0VBJFk0aeLXokYVhaws+N9ZhUwcVcZj7js0WXiC9IzjfHKkCU8/DUVFkLnmFX/7KJiVfvhhqDiYzo/fHoBVvuEb8lXXpo3vbz1sWKKykwTR7SORZJKd7Z8nOGnfPjrM/j7L2k/k+GPzqbSzOXykKa/88A1KSnxzUzZv9p+9/HL27fOrT0ePhq/lN4X+/f3ooybPP+/3VJakoqIgkkwuusjvZ3DwIPz+9/5p4rVrYcYM3z9p924ABjV5nbvu8lMJ//i/4HmEtm2ZPduvap02Ldw0JDwqCiLJ5KabfL+JsWPhxhv95PP69TBhgj9/zjl+NFFaSkGBX3k64/WL4bzz2LrVjxLGjoULLgg3DQmPioJIMrnkEr8iaPlyGDDAjxJ69z79Mz16QGkpnTvDxInw612Dea3FCCZN8nsyzJoVTujSMKgoiCQTM/+sQVYWLFrkJ5+r694dSkrAOR6cfoxctjHov+/ntdd8Q7vOnRMftjQcKgoiyaagwK9Aysur+Xz37r6vUXk5rSp28DzXM+LC7axaBXfckdhQpeHRklSRZJOeXvtTxid7G5WUwOHD9GYTy+ZuhwHnJiY+adBUFERSzcn+1qWlUFnp38caVUjKUVEQSTW5uX5LtvXrfSvVzEz/NLQIKgoiqSc9HYYP991Qjx+Ha6+N/YCapBz9SxBJRePHw969vo3q+PFhRyMNSNyKgpktMrO9ZvZODef+w8ycmbUP/mxm9oiZvWdmxWbWN15xiQgwZIjvX9S+fVTrU5H43j76DfAL4Mnog2aWA1wNRDVoYQjQLfj6N+Dx4FVE4iEjw7dQTUuDpk3DjkYakLgVBefcGjPLreHUw8C9wLKoYyOBJ51zDlhrZq3NrJNzbne84hNJeePGhR2BNEAJnVMws5HALufcxmqnOgM7o/78QXCspp8xycyKzKyorKwsTpGKiKSmhBUFMzsb+AEwtS4/xzk33zmX75zL79ChQ/0EJyIiQGKXpOYBXYCNZgaQDfzVzPoBu4CcqM9mB8dERCSBEjZScM5tcs6d45zLdc7l4m8R9XXOfQS8ANwSrEK6GKjQfIKISOLFc0nq00Ah0MPMPjCz22v5+HLgfeA9YAFwZ7ziEhGR2OK5+qjWpQ3BaOHkewfcFa9YRETkzOiJZhERiVBREBGRCPN3bhonMysDtn/Bb28PlNdjOI2Bck4Nyjk11CXnc51zNa7pb9RFoS7MrMg5lx92HImknFODck4N8cpZt49ERCRCRUFERCJSuSjMDzuAECjn1KCcU0Ncck7ZOQUREfmsVB4piIhINSoKIiISkZJFwcwGm1lJsP1nQdjxxIuZbTOzTWa2wcyKgmNtzexlM3s3eG0Tdpx1UdO2r7FyTJZtX2PkPM3MdgXXeoOZDY06959BziVmdk04UX9xZpZjZqvN7G9mttnM7gmOJ+11riXn+F9n51xKfQHpwFagK5ABbAS+GnZcccp1G9C+2rGZQEHwvgCYEXacdcxxANAXeOdf5QgMBV4CDLgYeCvs+Osx52nA5Bo++9Xg33gzfOv6rUB62Dl8znw74TsqA2QBpUFeSXuda8k57tc5FUcK/YD3nHPvO+eOAs/gtwNNFSOBxcH7xcCoEGOpM+fcGmB/tcOxcoxs++qcWwu0NrNOiYm0/sTIOZaRwDPOuSPOuX/gOxH3i1twceCc2+2c+2vw/iCwBb8zY9Je51pyjqXernMqFoUz3vozCThglZmtN7NJwbGO7tReFR8BHcMJLa5i5Zjs1/7u4HbJoqjbgkmVc7Dvex/gLVLkOlfLGeJ8nVOxKKSS/s65vsAQ4C4zGxB90vlxZ1KvSU6FHAOP43c3vBDYDTwUbjj1z8xaAH8Avuec+2f0uWS9zjXkHPfrnIpFIWW2/nTO7Qpe9wJ/xA8n95wcSgeve8OLMG5i5Zi01945t8c5d8I5V4XfqOrkrYOkyNnMmuJ/Of7WOfd8cDipr3NNOSfiOqdiUXgb6GZmXcwsAxiL3w40qZhZppllnXwPXA28g8/11uBjtwLLwokwrmLlmLTbvla7Z34d/lqDz3msmTUzsy5AN2BdouOrC/Obui8Etjjnfh51Kmmvc6ycE3Kdw55lD+MLvzqhFD9Df1/Y8cQpx6741Qgbgc0n8wTaAa8C7wKvAG3DjrWOeT6NH0Yfw99HvT1WjvjVKI8F130TkB92/PWY85Igp+LgF0SnqM/fF+RcAgwJO/4vkG9//K2hYmBD8DU0ma9zLTnH/TqrzYWIiESk4u0jERGJQUVBREQiVBRERCRCRUFERCJUFEREJEJFQeQMmFm7qM6UH0V1qjxkZvPCjk+kvmhJqsjnZGbTgEPOudlhxyJS3zRSEKkDMxtoZi8G76eZ2WIze8PMtpvZ9WY20/yeFiuCtgWY2UVm9nrQqHBlY+vgKclNRUGkfuUBVwIjgKeA1c65XsCnwLCgMDwKjHbOXQQsAh4IK1iR6pqEHYBIknnJOXfMzDbhN3RaERzfBOQCPYCewMu+vQ3p+JYVIg2CioJI/ToC4JyrMrNj7tSkXRX+/5sBm51zl4QVoEhtdPtIJLFKgA5mdgn49shmdkHIMYlEqCiIJJDzW8COBmaY2UZ898tLw41K5BQtSRURkQiNFEREJEJFQUREIlQUREQkQkVBREQiVBRERCRCRUFERCJUFEREJOL/AfbUPufET7vzAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化\n",
    "plot_predictions(test_set, GRU_predicted_stock_price)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
